package net.minecraft.world.gen.layer;

import net.minecraft.world.WorldType;
import net.minecraft.world.biome.BiomeGenBase;
import net.minecraft.world.gen.ChunkProviderSettings;

public class GenLayerBiome extends GenLayer {
	private BiomeGenBase[] field_151623_c = new BiomeGenBase[] { BiomeGenBase.desert, BiomeGenBase.desert,
			BiomeGenBase.desert, BiomeGenBase.savanna, BiomeGenBase.savanna, BiomeGenBase.plains };
	private BiomeGenBase[] field_151621_d = new BiomeGenBase[] { BiomeGenBase.forest, BiomeGenBase.roofedForest,
			BiomeGenBase.extremeHills, BiomeGenBase.plains, BiomeGenBase.birchForest, BiomeGenBase.swampland };
	private BiomeGenBase[] field_151622_e = new BiomeGenBase[] { BiomeGenBase.forest, BiomeGenBase.extremeHills,
			BiomeGenBase.taiga, BiomeGenBase.plains };
	private BiomeGenBase[] field_151620_f = new BiomeGenBase[] { BiomeGenBase.icePlains, BiomeGenBase.icePlains,
			BiomeGenBase.icePlains, BiomeGenBase.coldTaiga };
	private final ChunkProviderSettings field_175973_g;

	public GenLayerBiome(long p_i45560_1_, GenLayer p_i45560_3_, WorldType p_i45560_4_, String p_i45560_5_) {
		super(p_i45560_1_);
		this.parent = p_i45560_3_;

		if (p_i45560_4_ == WorldType.DEFAULT_1_1) {
			this.field_151623_c = new BiomeGenBase[] { BiomeGenBase.desert, BiomeGenBase.forest,
					BiomeGenBase.extremeHills, BiomeGenBase.swampland, BiomeGenBase.plains, BiomeGenBase.taiga };
			this.field_175973_g = null;
		} else if (p_i45560_4_ == WorldType.CUSTOMIZED) {
			this.field_175973_g = ChunkProviderSettings.Factory.jsonToFactory(p_i45560_5_).func_177864_b();
		} else {
			this.field_175973_g = null;
		}
	}

	/**
	 * Returns a list of integer values generated by this layer. These may be
	 * interpreted as temperatures, rainfall amounts, or biomeList[] indices based
	 * on the particular GenLayer subclass.
	 */
	public int[] getInts(int areaX, int areaY, int areaWidth, int areaHeight) {
		int[] aint = this.parent.getInts(areaX, areaY, areaWidth, areaHeight);
		int[] aint1 = IntCache.getIntCache(areaWidth * areaHeight);

		for (int i = 0; i < areaHeight; ++i) {
			for (int j = 0; j < areaWidth; ++j) {
				this.initChunkSeed((long) (j + areaX), (long) (i + areaY));
				int k = aint[j + i * areaWidth];
				int l = (k & 3840) >> 8;
				k = k & -3841;

				if (this.field_175973_g != null && this.field_175973_g.fixedBiome >= 0) {
					aint1[j + i * areaWidth] = this.field_175973_g.fixedBiome;
				} else if (isBiomeOceanic(k)) {
					aint1[j + i * areaWidth] = k;
				} else if (k == BiomeGenBase.mushroomIsland.biomeID) {
					aint1[j + i * areaWidth] = k;
				} else if (k == 1) {
					if (l > 0) {
						if (this.nextInt(3) == 0) {
							aint1[j + i * areaWidth] = BiomeGenBase.mesaPlateau.biomeID;
						} else {
							aint1[j + i * areaWidth] = BiomeGenBase.mesaPlateau_F.biomeID;
						}
					} else {
						aint1[j + i * areaWidth] = this.field_151623_c[this
								.nextInt(this.field_151623_c.length)].biomeID;
					}
				} else if (k == 2) {
					if (l > 0) {
						aint1[j + i * areaWidth] = BiomeGenBase.jungle.biomeID;
					} else {
						aint1[j + i * areaWidth] = this.field_151621_d[this
								.nextInt(this.field_151621_d.length)].biomeID;
					}
				} else if (k == 3) {
					if (l > 0) {
						aint1[j + i * areaWidth] = BiomeGenBase.megaTaiga.biomeID;
					} else {
						aint1[j + i * areaWidth] = this.field_151622_e[this
								.nextInt(this.field_151622_e.length)].biomeID;
					}
				} else if (k == 4) {
					aint1[j + i * areaWidth] = this.field_151620_f[this.nextInt(this.field_151620_f.length)].biomeID;
				} else {
					aint1[j + i * areaWidth] = BiomeGenBase.mushroomIsland.biomeID;
				}
			}
		}

		return aint1;
	}
}
